package novel.common.utils.weixin;

import novel.common.constant.IConstInfo;
import novel.common.utils.weixin.message.MessageUtil;
import novel.common.utils.weixin.message.res.TextMessage;

import javax.servlet.http.HttpServletRequest;
import java.util.Date;
import java.util.Map;

/**
 * Created by sutong on 2017/11/1.
 */
public class WxCoreService {
    /**
     * 处理微信发来的请求
     * @param request
     * @return xml
     */
    public static String   processRequest(HttpServletRequest request) {
        // xml格式的消息数据
        String respXml = null;
        // 默认返回的文本消息内容
        String respContent = "未知的消息类型！";
        System.out.println("进入消息处理");
        try {
            // 调用parseXml方法解析请求消息
            Map<String,String> requestMap = MessageUtil.parseXml(request);
            // 发送方帐号
            String fromUserName = requestMap.get("FromUserName");
            System.out.println("发送方帐号"+fromUserName);
            // 开发者微信号
            String toUserName = requestMap.get("ToUserName");
            System.out.println("开发者微信号"+toUserName);
            // 消息类型
            String msgType = requestMap.get("MsgType");
            System.out.println("消息类型"+msgType);

            // 回复文本消息
            TextMessage textMessage = new TextMessage();
            textMessage.setToUserName(fromUserName);
            textMessage.setFromUserName(toUserName);
            textMessage.setCreateTime(new Date().getTime());
            textMessage.setMsgType(MessageUtil.RESP_MESSAGE_TYPE_TEXT);

            boolean auto=false;
            // 文本消息
            if (msgType.equals(MessageUtil.REQ_MESSAGE_TYPE_TEXT)) {
                String msgContent=requestMap.get("Content");
                System.out.println("发送消息文本"+msgContent);
                if("123456".equals(msgContent)){
                    System.out.println("改变auto的状态");
                    auto=true;
                }
                String Url = "https://www.oloffe.com/wx2/wxxewcwes";
                String url1 = "https://open.weixin.qq.com/connect/oauth2/authorize?appid="+ IConstInfo.APP_ID + "&amp;redirect_uri=" + Url + "&amp;response_type=code&amp;scope=snsapi_userinfo&amp;state=STATE#wechat_redirect";
                respContent ="&lt;a href=&quot;" + url1 + "&quot;&gt;生成二维码&lt;/a&gt;";
            }
            // 图片消息
            else if (msgType.equals(MessageUtil.REQ_MESSAGE_TYPE_IMAGE)) {
                respContent = "您发送的是图片消息！";
            }
            // 语音消息
            else if (msgType.equals(MessageUtil.REQ_MESSAGE_TYPE_VOICE)) {
                respContent = "您发送的是语音消息！";
            }
            // 视频消息
            else if (msgType.equals(MessageUtil.REQ_MESSAGE_TYPE_VIDEO)) {
                respContent = "您发送的是视频消息！";
            }
            // 视频消息
            else if (msgType.equals(MessageUtil.REQ_MESSAGE_TYPE_SHORTVIDEO)) {
                respContent = "您发送的是小视频消息！";
            }
            // 地理位置消息
            else if (msgType.equals(MessageUtil.REQ_MESSAGE_TYPE_LOCATION)) {
                respContent = "您发送的是地理位置消息！";
            }
            // 链接消息
            else if (msgType.equals(MessageUtil.REQ_MESSAGE_TYPE_LINK)) {
                respContent = "您发送的是链接消息！";
            }
            // 事件推送
            else if (msgType.equals(MessageUtil.REQ_MESSAGE_TYPE_EVENT)) {
                System.out.println("进入事件处理");
                // 事件类型
                String eventType = requestMap.get("Event");
                // 关注
                if (eventType.equals(MessageUtil.EVENT_TYPE_SUBSCRIBE)) {
                    respContent = "谢谢您的关注！";
                }
                // 取消关注
                else if (eventType.equals(MessageUtil.EVENT_TYPE_UNSUBSCRIBE)) {
                    // TODO 取消订阅后用户不会再收到公众账号发送的消息，因此不需要回复
                }
                // 扫描带参数二维码
                else if (eventType.equals(MessageUtil.EVENT_TYPE_SCAN)) {
                    // TODO 处理扫描带参数二维码事件
                }
                // 上报地理位置
                else if (eventType.equals(MessageUtil.EVENT_TYPE_LOCATION)) {
                    // TODO 处理上报地理位置事件
                }
                // 自定义菜单
                else if (eventType.equals(MessageUtil.EVENT_TYPE_CLICK)) {
                    // TODO 处理菜单点击事件
                }
            }
            // 设置文本消息的内容
//            textMessage.setContent(respContent);
            textMessage.setContent("您好,这里是酷友卡商城-----海外最大最低价点卡商城。如需联系客服，请点击左下方退出输入状态, 然后点击右下方“在线客服\"");
            if (auto){
                textMessage.setContent(respContent);
            }
            // 将文本消息对象转换成xml
            respXml = MessageUtil.messageToXml(textMessage);
        } catch (Exception e) {
            e.printStackTrace();
            System.out.println("出错了："+e);
        }
        return respXml;
    }
}
